package br.com.toscano.contpedido.persistence;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

import br.com.toscano.contpedido.domain.Recebimento;
import br.gov.frameworkdemoiselle.stereotype.PersistenceController;
import br.gov.frameworkdemoiselle.template.JPACrud;

@PersistenceController
public class RecebimentoDAO extends JPACrud<Recebimento, Long> {

	private static final long serialVersionUID = 1L;
	
	public List<Recebimento> consultarRecebimento(Long idCliente, Long idUsuario, Date dataRecebimentoInicial, Date dataRecebimentoFinal, Boolean conferido) {
		String hql = "from "+Recebimento.class.getSimpleName()+" obj ";
		boolean jaTemRestricao = false;
		if (idCliente !=  null ) {
			if(jaTemRestricao) {
				hql = hql + " and ";
			} else {
				hql = hql + " where ";
			}
			hql = hql + " obj.cliente.id = :idCliente ";
			jaTemRestricao = true;
		}
		if (conferido !=  null ) {
			if(jaTemRestricao) {
				hql = hql + " and ";
			} else {
				hql = hql + " where ";
			}
			hql = hql + " obj.conferido = :conferido ";
			jaTemRestricao = true;
		}if (idUsuario !=  null ) {
			if(jaTemRestricao) {
				hql = hql + " and ";
			} else {
				hql = hql + " where ";
			}
			hql = hql + " obj.usuario.id = :idUsuario ";
			jaTemRestricao = true;
		}
		if (dataRecebimentoInicial !=  null ) {
			if(jaTemRestricao) {
				hql = hql + " and ";
			} else {
				hql = hql + " where ";
			}
			hql = hql + " obj.dataRecebimento >= :dataRecebimentoInicial";
			jaTemRestricao = true;
		}
		if (dataRecebimentoFinal !=  null ) {
			if(jaTemRestricao) {
				hql = hql + " and ";
			} else {
				hql = hql + " where ";
			}
			hql = hql + " obj.dataRecebimento <= :dataRecebimentoFinal";
			jaTemRestricao = true;
		}

		hql = hql + " order by obj.id desc ";

		javax.persistence.Query q = createQuery(hql);
		if (idCliente !=  null ) {
			q.setParameter("idCliente", idCliente);
		}
		if (idUsuario !=  null ) {
			q.setParameter("idUsuario", idUsuario);
		}
		if (conferido !=  null ) {
			q.setParameter("conferido", conferido);
		}
		if (dataRecebimentoInicial !=  null ) {
			Calendar cal = Calendar.getInstance();
			cal.setTime(dataRecebimentoInicial);
			cal.set(Calendar.HOUR_OF_DAY,0);
			cal.set(Calendar.MINUTE,0);
			cal.set(Calendar.SECOND,0);
			dataRecebimentoInicial = cal.getTime();
			q.setParameter("dataRecebimentoInicial", dataRecebimentoInicial);
		}
		if (dataRecebimentoFinal !=  null ) {
			Calendar cal = Calendar.getInstance();
			cal.setTime(dataRecebimentoFinal);
			cal.set(Calendar.HOUR_OF_DAY,23);
			cal.set(Calendar.MINUTE,59);
			cal.set(Calendar.SECOND,59);
			dataRecebimentoFinal = cal.getTime();
			q.setParameter("dataRecebimentoFinal", dataRecebimentoFinal);
		}

		List<Recebimento> lista = q.getResultList();
		return lista;
	}

}
